1. Field of the Invention
The present invention is related to application configuration, and more particularly to configuration of an application through a centralized source external to the application.
2. Description of the Background Art
Software applications often permit a user to have some control over his/her user experience when using the software application by allowing the user to set a number of user preferences and configure the application to meet the user's specific needs. Such configuration options allow a user to set, for example, the colors and fonts used in the application, what menus appear and what menu items are displayed in each menu, and other similar types of preferences.
While the user has some ability to control application configuration according to the user's preferences, frequently the options available to the user for application configuration are set when compiling the application. The data used to control application configuration is bound at compile time, and thus cannot later be easily revised or updated independently. If the application configuration data is built in as a part of the application itself, rather than being stored externally, it is particularly difficult to update or modify the data. It would be useful to be able to control the user experience and control application configuration based upon the context or state of the application, and thus have the application configuration vary dependent upon the context of the application. For example, it would be useful to be able to control which menus and menu items appear dependent upon the version of the application that is running, the results of a previous menu item selection, information provided to the application, what files are currently open, what access authority a user has, etc. As one example, if the “professional version” of the application is running rather than the “basic version,” more menus and menu items associated with this version may appear, which would otherwise not appear in the “basic version.” Thus, the application behavior changes based upon the current application context.
Some current applications have “add-ins,” in which the presence of a physical file or registry entry makes functionality available dependent on the presence of the file/entry. Some products have in-code mechanisms for checking licenses or registry files and dynamically adjusting the application configuration. However, these do not provide general-purpose control over a large number of different user experiences and application configurations based on context. The decision-making regarding application configuration is not centralized, nor is the data easily updated or able to be updated without restarting the application. It would be useful to have a flexible system that can be used to control the configuration of a number of different applications, and that allows centralized control of large portions of the user experience based on data stored external to the application that is independently updateable.
Accordingly, what is needed is a general-purpose mechanism for dynamically controlling the application configuration via independently updateable external data based on different contexts or states of the application.